#include "UdpServer.hpp"
#include <cstdlib>
#include "InetAddr.hpp"
#include "Route.hpp"
#include "ThreadPool.hpp"
using namespace ThreadPoolModule;

// 实现聊天：
// 服务器端，要将从客户端收到的信息，转发给说有在线用户！

// 给出 端口号
int main(int argc, char *argv[])
{
    if (argc != 2)
    {
        std::cout << "Please use: " << argv[0] << " PORT" << endl;
    }
    else
    {
        // 相当难理解!!!!!!! 不中了

        // 1.数据路由模块
        Route route;

        // 2.进程池模块
        using func_t = function<void()>;
        ThreadPool<func_t> threadpool(5);

        // 3. 网络服务器对象，提供通信功能
        uint16_t port = stoi(argv[1]); // 注：字符串转整数

        // 启动进程池
        threadpool.Start();

        std::unique_ptr<udpserver> usvr = std::make_unique<udpserver>(port, [&route, &threadpool](int &sockfd, std::string message, InetAddr &peer)
                                                                      {
            func_t t = std::bind(&Route::MessageRoute,&route,sockfd, message, peer);
            threadpool.Equeue(t); });

        // 启动服务端
        usvr->Init();
        usvr->Start();

        //

        // udpserver us(port, [&route](int &sockfd, std::string message, InetAddr &addr)
        //              { return route.MessageRoute(sockfd, message, addr); });
        // us.Init();
        // us.Start();
    }
}